<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Doxygen: mets::tabu_search&lt; move_manager_type &gt; 模板类 参考</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Doxygen
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'搜索','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','搜索');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('classmets_1_1tabu__search.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#pub-types">Public 类型</a> &#124;
<a href="#pub-methods">Public 成员函数</a> &#124;
<a href="#pro-attribs">Protected 属性</a> &#124;
<a href="classmets_1_1tabu__search-members.html">所有成员列表</a>  </div>
  <div class="headertitle">
<div class="title">mets::tabu_search&lt; move_manager_type &gt; 模板类 参考<div class="ingroups"><a class="el" href="group__tabu__search.html">Tabu Search</a></div></div>  </div>
</div><!--header-->
<div class="contents">

<p>Tabu Search algorithm.  
 <a href="classmets_1_1tabu__search.html#details">更多...</a></p>

<p><code>#include &lt;<a class="el" href="tabu-search_8hh_source.html">tabu-search.hh</a>&gt;</code></p>
<div class="dynheader">
类 mets::tabu_search&lt; move_manager_type &gt; 继承关系图:</div>
<div class="dyncontent">
 <div class="center">
  <img src="classmets_1_1tabu__search.png" usemap="#mets::tabu_5Fsearch_3C_20move_5Fmanager_5Ftype_20_3E_map" alt=""/>
  <map id="mets::tabu_5Fsearch_3C_20move_5Fmanager_5Ftype_20_3E_map" name="mets::tabu_5Fsearch_3C_20move_5Fmanager_5Ftype_20_3E_map">
<area href="classmets_1_1abstract__search.html" title="An abstract search." alt="mets::abstract_search&lt; move_manager_type &gt;" shape="rect" coords="0,56,339,80"/>
<area href="classmets_1_1subject.html" alt="mets::subject&lt; abstract_search&lt; move_manager_type &gt; &gt;" shape="rect" coords="0,0,339,24"/>
  </map>
</div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public 类型</h2></td></tr>
<tr class="memitem:a2be0c4b3cf9f093818576085e654038a"><td class="memItemLeft" align="right" valign="top"><a id="a2be0c4b3cf9f093818576085e654038a"></a>enum &#160;</td><td class="memItemRight" valign="bottom">{ <b>ASPIRATION_CRITERIA_MET</b> = abstract_search&lt;move_manager_type&gt;::LAST
, <b>LAST</b>
 }</td></tr>
<tr class="separator:a2be0c4b3cf9f093818576085e654038a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a85e8ea6b3b7ec549930b959e11b5d453"><td class="memItemLeft" align="right" valign="top"><a id="a85e8ea6b3b7ec549930b959e11b5d453"></a>
typedef <a class="el" href="classmets_1_1tabu__search.html">tabu_search</a>&lt; move_manager_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>search_type</b></td></tr>
<tr class="separator:a85e8ea6b3b7ec549930b959e11b5d453"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_types_classmets_1_1abstract__search"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classmets_1_1abstract__search')"><img src="closed.png" alt="-"/>&#160;Public 类型 继承自 <a class="el" href="classmets_1_1abstract__search.html">mets::abstract_search&lt; move_manager_type &gt;</a></td></tr>
<tr class="memitem:add8e7e7b063145361775a3b3280a7f13 inherit pub_types_classmets_1_1abstract__search"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom">{ <br />
&#160;&#160;<a class="el" href="classmets_1_1abstract__search.html#add8e7e7b063145361775a3b3280a7f13a97ca1cddb103101df3f5efd6afa909a3">MOVE_MADE</a> = 0
, <a class="el" href="classmets_1_1abstract__search.html#add8e7e7b063145361775a3b3280a7f13a097dfcc9c9fd4a57815225d689ccd65b">IMPROVEMENT_MADE</a>
, <a class="el" href="classmets_1_1abstract__search.html#add8e7e7b063145361775a3b3280a7f13a89508708b3905bfddc4dc4099cfb5eff">ITERATION_BEGIN</a>
, <a class="el" href="classmets_1_1abstract__search.html#add8e7e7b063145361775a3b3280a7f13a1f828a6d9da2b4b791e4467402690a02">ITERATION_END</a>
, <br />
&#160;&#160;<a class="el" href="classmets_1_1abstract__search.html#add8e7e7b063145361775a3b3280a7f13a76e99386020b09218bc569b6c597548d">LAST</a>
<br />
 }</td></tr>
<tr class="separator:add8e7e7b063145361775a3b3280a7f13 inherit pub_types_classmets_1_1abstract__search"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public 成员函数</h2></td></tr>
<tr class="memitem:a7ce2a0dea883851fb9c6b62355f90829"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1tabu__search.html#a7ce2a0dea883851fb9c6b62355f90829">tabu_search</a> (<a class="el" href="classmets_1_1feasible__solution.html">feasible_solution</a> &amp;starting_solution, <a class="el" href="classmets_1_1solution__recorder.html">solution_recorder</a> &amp;best_recorder, move_manager_type &amp;move_manager_inst, <a class="el" href="classmets_1_1tabu__list__chain.html">tabu_list_chain</a> &amp;tabus, <a class="el" href="classmets_1_1aspiration__criteria__chain.html">aspiration_criteria_chain</a> &amp;aspiration, <a class="el" href="classmets_1_1termination__criteria__chain.html">termination_criteria_chain</a> &amp;termination)</td></tr>
<tr class="memdesc:a7ce2a0dea883851fb9c6b62355f90829"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a tabu Search instance.  <a href="classmets_1_1tabu__search.html#a7ce2a0dea883851fb9c6b62355f90829">更多...</a><br /></td></tr>
<tr class="separator:a7ce2a0dea883851fb9c6b62355f90829"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a12e94b4c2c51a862b6300d4c93ba3e88"><td class="memItemLeft" align="right" valign="top"><a id="a12e94b4c2c51a862b6300d4c93ba3e88"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>tabu_search</b> (const <a class="el" href="classmets_1_1tabu__search.html">search_type</a> &amp;)</td></tr>
<tr class="separator:a12e94b4c2c51a862b6300d4c93ba3e88"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa0e710608cda4ec0623855bcec9919ed"><td class="memItemLeft" align="right" valign="top"><a id="aa0e710608cda4ec0623855bcec9919ed"></a>
<a class="el" href="classmets_1_1tabu__search.html">search_type</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="classmets_1_1tabu__search.html">search_type</a> &amp;)</td></tr>
<tr class="separator:aa0e710608cda4ec0623855bcec9919ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1ab0fb202ee3171b5537b501496379a7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1tabu__search.html#a1ab0fb202ee3171b5537b501496379a7">search</a> ()  throw (no_moves_error)</td></tr>
<tr class="memdesc:a1ab0fb202ee3171b5537b501496379a7"><td class="mdescLeft">&#160;</td><td class="mdescRight">This method starts the tabu search process.  <a href="classmets_1_1tabu__search.html#a1ab0fb202ee3171b5537b501496379a7">更多...</a><br /></td></tr>
<tr class="separator:a1ab0fb202ee3171b5537b501496379a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7acba00a6473c7474b3b46cee96f6fce"><td class="memItemLeft" align="right" valign="top"><a id="a7acba00a6473c7474b3b46cee96f6fce"></a>
const <a class="el" href="classmets_1_1tabu__list__chain.html">tabu_list_chain</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1tabu__search.html#a7acba00a6473c7474b3b46cee96f6fce">get_tabu_list</a> () const</td></tr>
<tr class="memdesc:a7acba00a6473c7474b3b46cee96f6fce"><td class="mdescLeft">&#160;</td><td class="mdescRight">The tabu list used by this tabu search <br /></td></tr>
<tr class="separator:a7acba00a6473c7474b3b46cee96f6fce"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a90b67075205185e196ebc02f4d701e39"><td class="memItemLeft" align="right" valign="top"><a id="a90b67075205185e196ebc02f4d701e39"></a>
const <a class="el" href="classmets_1_1aspiration__criteria__chain.html">aspiration_criteria_chain</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1tabu__search.html#a90b67075205185e196ebc02f4d701e39">get_aspiration_criteria</a> () const</td></tr>
<tr class="memdesc:a90b67075205185e196ebc02f4d701e39"><td class="mdescLeft">&#160;</td><td class="mdescRight">The aspiration criteria used by this tabu search <br /></td></tr>
<tr class="separator:a90b67075205185e196ebc02f4d701e39"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8f524e45e73faece17742232889bb2c5"><td class="memItemLeft" align="right" valign="top"><a id="a8f524e45e73faece17742232889bb2c5"></a>
const <a class="el" href="classmets_1_1termination__criteria__chain.html">termination_criteria_chain</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1tabu__search.html#a8f524e45e73faece17742232889bb2c5">get_termination_criteria</a> () const</td></tr>
<tr class="memdesc:a8f524e45e73faece17742232889bb2c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">The termination criteria used by this tabu search <br /></td></tr>
<tr class="separator:a8f524e45e73faece17742232889bb2c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classmets_1_1abstract__search"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classmets_1_1abstract__search')"><img src="closed.png" alt="-"/>&#160;Public 成员函数 继承自 <a class="el" href="classmets_1_1abstract__search.html">mets::abstract_search&lt; move_manager_type &gt;</a></td></tr>
<tr class="memitem:ac8b0d53e92a4c7510f28d35a8d0153dd inherit pub_methods_classmets_1_1abstract__search"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1abstract__search.html#ac8b0d53e92a4c7510f28d35a8d0153dd">abstract_search</a> (<a class="el" href="classmets_1_1feasible__solution.html">feasible_solution</a> &amp;<a class="el" href="classmets_1_1abstract__search.html#a81d584dbf1eaf56dc5e122a16abedf7d">working</a>, <a class="el" href="classmets_1_1solution__recorder.html">solution_recorder</a> &amp;<a class="el" href="classmets_1_1abstract__search.html#ac2a0764914a1be2c4e06b9120c9fa7bd">recorder</a>, move_manager_type &amp;moveman)</td></tr>
<tr class="memdesc:ac8b0d53e92a4c7510f28d35a8d0153dd inherit pub_methods_classmets_1_1abstract__search"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set some common values needed for neighborhood based metaheuristics.  <a href="classmets_1_1abstract__search.html#ac8b0d53e92a4c7510f28d35a8d0153dd">更多...</a><br /></td></tr>
<tr class="separator:ac8b0d53e92a4c7510f28d35a8d0153dd inherit pub_methods_classmets_1_1abstract__search"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8754f00b5cbd58f4dfb28120d5d7f9f2 inherit pub_methods_classmets_1_1abstract__search"><td class="memItemLeft" align="right" valign="top"><a id="a8754f00b5cbd58f4dfb28120d5d7f9f2"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1abstract__search.html#a8754f00b5cbd58f4dfb28120d5d7f9f2">abstract_search</a> (const <a class="el" href="classmets_1_1abstract__search.html">abstract_search</a>&lt; move_manager_type &gt; &amp;)</td></tr>
<tr class="memdesc:a8754f00b5cbd58f4dfb28120d5d7f9f2 inherit pub_methods_classmets_1_1abstract__search"><td class="mdescLeft">&#160;</td><td class="mdescRight">purposely not implemented (see Effective C++) <br /></td></tr>
<tr class="separator:a8754f00b5cbd58f4dfb28120d5d7f9f2 inherit pub_methods_classmets_1_1abstract__search"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa70d0d3f2c80939734aef1c38464fb0f inherit pub_methods_classmets_1_1abstract__search"><td class="memItemLeft" align="right" valign="top"><a id="aa70d0d3f2c80939734aef1c38464fb0f"></a>
<a class="el" href="classmets_1_1abstract__search.html">abstract_search</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1abstract__search.html#aa70d0d3f2c80939734aef1c38464fb0f">operator==</a> (const <a class="el" href="classmets_1_1abstract__search.html">abstract_search</a>&lt; move_manager_type &gt; &amp;)</td></tr>
<tr class="memdesc:aa70d0d3f2c80939734aef1c38464fb0f inherit pub_methods_classmets_1_1abstract__search"><td class="mdescLeft">&#160;</td><td class="mdescRight">purposely not implemented (see Effective C++) <br /></td></tr>
<tr class="separator:aa70d0d3f2c80939734aef1c38464fb0f inherit pub_methods_classmets_1_1abstract__search"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7eb628da5c538bbe2551de7067bde94f inherit pub_methods_classmets_1_1abstract__search"><td class="memItemLeft" align="right" valign="top"><a id="a7eb628da5c538bbe2551de7067bde94f"></a>
virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1abstract__search.html#a7eb628da5c538bbe2551de7067bde94f">~abstract_search</a> ()</td></tr>
<tr class="memdesc:a7eb628da5c538bbe2551de7067bde94f inherit pub_methods_classmets_1_1abstract__search"><td class="mdescLeft">&#160;</td><td class="mdescRight">Virtual destructor. <br /></td></tr>
<tr class="separator:a7eb628da5c538bbe2551de7067bde94f inherit pub_methods_classmets_1_1abstract__search"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac2a0764914a1be2c4e06b9120c9fa7bd inherit pub_methods_classmets_1_1abstract__search"><td class="memItemLeft" align="right" valign="top"><a id="ac2a0764914a1be2c4e06b9120c9fa7bd"></a>
const <a class="el" href="classmets_1_1solution__recorder.html">solution_recorder</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1abstract__search.html#ac2a0764914a1be2c4e06b9120c9fa7bd">recorder</a> () const</td></tr>
<tr class="memdesc:ac2a0764914a1be2c4e06b9120c9fa7bd inherit pub_methods_classmets_1_1abstract__search"><td class="mdescLeft">&#160;</td><td class="mdescRight">The solution recorder instance. <br /></td></tr>
<tr class="separator:ac2a0764914a1be2c4e06b9120c9fa7bd inherit pub_methods_classmets_1_1abstract__search"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a81d584dbf1eaf56dc5e122a16abedf7d inherit pub_methods_classmets_1_1abstract__search"><td class="memItemLeft" align="right" valign="top"><a id="a81d584dbf1eaf56dc5e122a16abedf7d"></a>
const <a class="el" href="classmets_1_1feasible__solution.html">feasible_solution</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1abstract__search.html#a81d584dbf1eaf56dc5e122a16abedf7d">working</a> () const</td></tr>
<tr class="memdesc:a81d584dbf1eaf56dc5e122a16abedf7d inherit pub_methods_classmets_1_1abstract__search"><td class="mdescLeft">&#160;</td><td class="mdescRight">The current working solution. <br /></td></tr>
<tr class="separator:a81d584dbf1eaf56dc5e122a16abedf7d inherit pub_methods_classmets_1_1abstract__search"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab5af44f66b46c50a7eb984fa48a413a3 inherit pub_methods_classmets_1_1abstract__search"><td class="memItemLeft" align="right" valign="top"><a id="ab5af44f66b46c50a7eb984fa48a413a3"></a>
<a class="el" href="classmets_1_1feasible__solution.html">feasible_solution</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>working</b> ()</td></tr>
<tr class="separator:ab5af44f66b46c50a7eb984fa48a413a3 inherit pub_methods_classmets_1_1abstract__search"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acadceab7cdd6c7e6bfc108acb56f3831 inherit pub_methods_classmets_1_1abstract__search"><td class="memItemLeft" align="right" valign="top"><a id="acadceab7cdd6c7e6bfc108acb56f3831"></a>
const <a class="el" href="classmets_1_1move.html">move</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1abstract__search.html#acadceab7cdd6c7e6bfc108acb56f3831">current_move</a> () const</td></tr>
<tr class="memdesc:acadceab7cdd6c7e6bfc108acb56f3831 inherit pub_methods_classmets_1_1abstract__search"><td class="mdescLeft">&#160;</td><td class="mdescRight">The last move made <br /></td></tr>
<tr class="separator:acadceab7cdd6c7e6bfc108acb56f3831 inherit pub_methods_classmets_1_1abstract__search"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab3344b3a27baf680da3d084aa5916374 inherit pub_methods_classmets_1_1abstract__search"><td class="memItemLeft" align="right" valign="top"><a id="ab3344b3a27baf680da3d084aa5916374"></a>
<a class="el" href="classmets_1_1move.html">move</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1abstract__search.html#ab3344b3a27baf680da3d084aa5916374">current_move</a> ()</td></tr>
<tr class="memdesc:ab3344b3a27baf680da3d084aa5916374 inherit pub_methods_classmets_1_1abstract__search"><td class="mdescLeft">&#160;</td><td class="mdescRight">The last move made <br /></td></tr>
<tr class="separator:ab3344b3a27baf680da3d084aa5916374 inherit pub_methods_classmets_1_1abstract__search"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aabfba800289490b7b6d10f49c60761af inherit pub_methods_classmets_1_1abstract__search"><td class="memItemLeft" align="right" valign="top"><a id="aabfba800289490b7b6d10f49c60761af"></a>
const move_manager_type &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1abstract__search.html#aabfba800289490b7b6d10f49c60761af">move_manager</a> () const</td></tr>
<tr class="memdesc:aabfba800289490b7b6d10f49c60761af inherit pub_methods_classmets_1_1abstract__search"><td class="mdescLeft">&#160;</td><td class="mdescRight">The move manager used by this search <br /></td></tr>
<tr class="separator:aabfba800289490b7b6d10f49c60761af inherit pub_methods_classmets_1_1abstract__search"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a45c11083e68c7c1f3cad2db072cb3b29 inherit pub_methods_classmets_1_1abstract__search"><td class="memItemLeft" align="right" valign="top"><a id="a45c11083e68c7c1f3cad2db072cb3b29"></a>
move_manager_type &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1abstract__search.html#a45c11083e68c7c1f3cad2db072cb3b29">move_manager</a> ()</td></tr>
<tr class="memdesc:a45c11083e68c7c1f3cad2db072cb3b29 inherit pub_methods_classmets_1_1abstract__search"><td class="mdescLeft">&#160;</td><td class="mdescRight">The move manager used by this search <br /></td></tr>
<tr class="separator:a45c11083e68c7c1f3cad2db072cb3b29 inherit pub_methods_classmets_1_1abstract__search"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a34d5a51aa2185952505cf9c22b2bbc68 inherit pub_methods_classmets_1_1abstract__search"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1abstract__search.html#a34d5a51aa2185952505cf9c22b2bbc68">step</a> () const</td></tr>
<tr class="memdesc:a34d5a51aa2185952505cf9c22b2bbc68 inherit pub_methods_classmets_1_1abstract__search"><td class="mdescLeft">&#160;</td><td class="mdescRight">The current step of the algorithm (to be used by the observers).  <a href="classmets_1_1abstract__search.html#a34d5a51aa2185952505cf9c22b2bbc68">更多...</a><br /></td></tr>
<tr class="separator:a34d5a51aa2185952505cf9c22b2bbc68 inherit pub_methods_classmets_1_1abstract__search"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classmets_1_1subject"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classmets_1_1subject')"><img src="closed.png" alt="-"/>&#160;Public 成员函数 继承自 <a class="el" href="classmets_1_1subject.html">mets::subject&lt; abstract_search&lt; move_manager_type &gt; &gt;</a></td></tr>
<tr class="memitem:a580c481db07f883261c0a24f0f201067 inherit pub_methods_classmets_1_1subject"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1subject.html#a580c481db07f883261c0a24f0f201067">attach</a> (<a class="el" href="classmets_1_1observer.html">observer</a>&lt; <a class="el" href="classmets_1_1abstract__search.html">abstract_search</a>&lt; move_manager_type &gt; &gt; &amp;o)</td></tr>
<tr class="memdesc:a580c481db07f883261c0a24f0f201067 inherit pub_methods_classmets_1_1subject"><td class="mdescLeft">&#160;</td><td class="mdescRight">Attach a new observer to this subject.  <a href="classmets_1_1subject.html#a580c481db07f883261c0a24f0f201067">更多...</a><br /></td></tr>
<tr class="separator:a580c481db07f883261c0a24f0f201067 inherit pub_methods_classmets_1_1subject"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af6b5055d74cb5671e46bb57a4109cf3a inherit pub_methods_classmets_1_1subject"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1subject.html#af6b5055d74cb5671e46bb57a4109cf3a">detach</a> (<a class="el" href="classmets_1_1observer.html">observer</a>&lt; <a class="el" href="classmets_1_1abstract__search.html">abstract_search</a>&lt; move_manager_type &gt; &gt; &amp;o)</td></tr>
<tr class="memdesc:af6b5055d74cb5671e46bb57a4109cf3a inherit pub_methods_classmets_1_1subject"><td class="mdescLeft">&#160;</td><td class="mdescRight">Detach a new observer to this subject.  <a href="classmets_1_1subject.html#af6b5055d74cb5671e46bb57a4109cf3a">更多...</a><br /></td></tr>
<tr class="separator:af6b5055d74cb5671e46bb57a4109cf3a inherit pub_methods_classmets_1_1subject"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a604a3c6cb19a470779170e29528f3e83 inherit pub_methods_classmets_1_1subject"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmets_1_1subject.html#a604a3c6cb19a470779170e29528f3e83">notify</a> ()</td></tr>
<tr class="memdesc:a604a3c6cb19a470779170e29528f3e83 inherit pub_methods_classmets_1_1subject"><td class="mdescLeft">&#160;</td><td class="mdescRight">Notify all attached observers.  <a href="classmets_1_1subject.html#a604a3c6cb19a470779170e29528f3e83">更多...</a><br /></td></tr>
<tr class="separator:a604a3c6cb19a470779170e29528f3e83 inherit pub_methods_classmets_1_1subject"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
Protected 属性</h2></td></tr>
<tr class="memitem:a9a1d10ec3f41b018f59b8c3aa0ab7e8d"><td class="memItemLeft" align="right" valign="top"><a id="a9a1d10ec3f41b018f59b8c3aa0ab7e8d"></a>
<a class="el" href="classmets_1_1tabu__list__chain.html">tabu_list_chain</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>tabu_list_m</b></td></tr>
<tr class="separator:a9a1d10ec3f41b018f59b8c3aa0ab7e8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa6dca29126777df16a6a2ffe577df0ec"><td class="memItemLeft" align="right" valign="top"><a id="aa6dca29126777df16a6a2ffe577df0ec"></a>
<a class="el" href="classmets_1_1aspiration__criteria__chain.html">aspiration_criteria_chain</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>aspiration_criteria_m</b></td></tr>
<tr class="separator:aa6dca29126777df16a6a2ffe577df0ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae55851a757e15da846e4f70b00c02fe4"><td class="memItemLeft" align="right" valign="top"><a id="ae55851a757e15da846e4f70b00c02fe4"></a>
<a class="el" href="classmets_1_1termination__criteria__chain.html">termination_criteria_chain</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>termination_criteria_m</b></td></tr>
<tr class="separator:ae55851a757e15da846e4f70b00c02fe4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_attribs_classmets_1_1abstract__search"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classmets_1_1abstract__search')"><img src="closed.png" alt="-"/>&#160;Protected 属性 继承自 <a class="el" href="classmets_1_1abstract__search.html">mets::abstract_search&lt; move_manager_type &gt;</a></td></tr>
<tr class="memitem:a0e83fc9a38ebb0e43a01e39a9f355571 inherit pro_attribs_classmets_1_1abstract__search"><td class="memItemLeft" align="right" valign="top"><a id="a0e83fc9a38ebb0e43a01e39a9f355571"></a>
<a class="el" href="classmets_1_1solution__recorder.html">solution_recorder</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>solution_recorder_m</b></td></tr>
<tr class="separator:a0e83fc9a38ebb0e43a01e39a9f355571 inherit pro_attribs_classmets_1_1abstract__search"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5c4dca8f8eb5c44b6a82850a1c2877c6 inherit pro_attribs_classmets_1_1abstract__search"><td class="memItemLeft" align="right" valign="top"><a id="a5c4dca8f8eb5c44b6a82850a1c2877c6"></a>
<a class="el" href="classmets_1_1feasible__solution.html">feasible_solution</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>working_solution_m</b></td></tr>
<tr class="separator:a5c4dca8f8eb5c44b6a82850a1c2877c6 inherit pro_attribs_classmets_1_1abstract__search"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a21b7cc1546cea204ec302745a2414d3b inherit pro_attribs_classmets_1_1abstract__search"><td class="memItemLeft" align="right" valign="top"><a id="a21b7cc1546cea204ec302745a2414d3b"></a>
move_manager_type &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>moves_m</b></td></tr>
<tr class="separator:a21b7cc1546cea204ec302745a2414d3b inherit pro_attribs_classmets_1_1abstract__search"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a030ba3ca63ea155fc4f70972b1134560 inherit pro_attribs_classmets_1_1abstract__search"><td class="memItemLeft" align="right" valign="top"><a id="a030ba3ca63ea155fc4f70972b1134560"></a>
move_manager_type::iterator&#160;</td><td class="memItemRight" valign="bottom"><b>current_move_m</b></td></tr>
<tr class="separator:a030ba3ca63ea155fc4f70972b1134560 inherit pro_attribs_classmets_1_1abstract__search"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac30e04104d2803c16bfc5ff905ec9d55 inherit pro_attribs_classmets_1_1abstract__search"><td class="memItemLeft" align="right" valign="top"><a id="ac30e04104d2803c16bfc5ff905ec9d55"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>step_m</b></td></tr>
<tr class="separator:ac30e04104d2803c16bfc5ff905ec9d55 inherit pro_attribs_classmets_1_1abstract__search"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_attribs_classmets_1_1subject"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classmets_1_1subject')"><img src="closed.png" alt="-"/>&#160;Protected 属性 继承自 <a class="el" href="classmets_1_1subject.html">mets::subject&lt; abstract_search&lt; move_manager_type &gt; &gt;</a></td></tr>
<tr class="memitem:a01924f78859ce56ff0448030e81166e0 inherit pro_attribs_classmets_1_1subject"><td class="memItemLeft" align="right" valign="top"><a id="a01924f78859ce56ff0448030e81166e0"></a>
std::set&lt; <a class="el" href="classmets_1_1observer.html">observer</a>&lt; <a class="el" href="classmets_1_1abstract__search.html">abstract_search</a>&lt; move_manager_type &gt; &gt; * &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>observers_m</b></td></tr>
<tr class="separator:a01924f78859ce56ff0448030e81166e0 inherit pro_attribs_classmets_1_1subject"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">详细描述</h2>
<div class="textblock"><h3>template&lt;typename move_manager_type&gt;<br />
class mets::tabu_search&lt; move_manager_type &gt;</h3>

<p>Tabu Search algorithm. </p>
<p>This implements decorator pattern. You can build many different solvers decorating <a class="el" href="classmets_1_1tabu__search.html" title="Tabu Search algorithm.">tabu_search</a> class in different ways. </p>
</div><h2 class="groupheader">构造及析构函数说明</h2>
<a id="a7ce2a0dea883851fb9c6b62355f90829"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7ce2a0dea883851fb9c6b62355f90829">&#9670;&nbsp;</a></span>tabu_search()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename move_manager_type &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classmets_1_1tabu__search.html">mets::tabu_search</a>&lt; move_manager_type &gt;::<a class="el" href="classmets_1_1tabu__search.html">tabu_search</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classmets_1_1feasible__solution.html">feasible_solution</a> &amp;&#160;</td>
          <td class="paramname"><em>starting_solution</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classmets_1_1solution__recorder.html">solution_recorder</a> &amp;&#160;</td>
          <td class="paramname"><em>best_recorder</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">move_manager_type &amp;&#160;</td>
          <td class="paramname"><em>move_manager_inst</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classmets_1_1tabu__list__chain.html">tabu_list_chain</a> &amp;&#160;</td>
          <td class="paramname"><em>tabus</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classmets_1_1aspiration__criteria__chain.html">aspiration_criteria_chain</a> &amp;&#160;</td>
          <td class="paramname"><em>aspiration</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classmets_1_1termination__criteria__chain.html">termination_criteria_chain</a> &amp;&#160;</td>
          <td class="paramname"><em>termination</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Creates a tabu Search instance. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">starting_solution</td><td>The working solution (this will be modified during search).</td></tr>
    <tr><td class="paramname">best_recorder</td><td>A solution recorder used to record the best solution found during the search.</td></tr>
    <tr><td class="paramname">move_manager_inst</td><td>A problem specific implementation of the move_manager_type used to generate the neighborhood.</td></tr>
    <tr><td class="paramname">tabus</td><td>The tabu list used to decorate this search instance.</td></tr>
    <tr><td class="paramname">aspiration</td><td>The aspiration criteria to use in this tabu search.</td></tr>
    <tr><td class="paramname">termination</td><td>The termination criteria used to terminate the search process, this is an extension to the standard Simulated Annealing: you can give a termination criteria that termiantes when temperature reaches 0. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<h2 class="groupheader">成员函数说明</h2>
<a id="a1ab0fb202ee3171b5537b501496379a7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1ab0fb202ee3171b5537b501496379a7">&#9670;&nbsp;</a></span>search()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename move_manager_t &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classmets_1_1tabu__search.html">mets::tabu_search</a>&lt; move_manager_t &gt;::search</td>
        </tr>
        <tr>
          <td align="right">throw </td><td>(</td><td colspan="2"><a class="el" href="classmets_1_1no__moves__error.html">no_moves_error</a></td>
        </tr>
        <tr>
          <td align="right"></td><td>)</td><td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>This method starts the tabu search process. </p>
<p>Remember that this is a minimization process.</p>
<p>An exception <a class="el" href="classmets_1_1no__moves__error.html" title="Exception risen when some algorithm has no more moves to make.">mets::no_moves_error</a> is risen when no move is possible. </p>

<p>实现了 <a class="el" href="classmets_1_1abstract__search.html#a9c57b09ce6efdb9c3dfc47bb1a38efe9">mets::abstract_search&lt; move_manager_type &gt;</a>.</p>
<div class="fragment"><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;{</div>
<div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;  <span class="keyword">typedef</span> abstract_search&lt;move_manager_t&gt; base_t;</div>
<div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;  <span class="keywordflow">while</span>(!termination_criteria_m(base_t::working_solution_m))</div>
<div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;    {</div>
<div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;      <span class="comment">// call listeners</span></div>
<div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;      base_t::step_m = base_t::ITERATION_BEGIN;</div>
<div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;      this-&gt;<a class="code" href="classmets_1_1subject.html#a604a3c6cb19a470779170e29528f3e83">notify</a>();</div>
<div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160; </div>
<div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;      base_t::moves_m.refresh(base_t::working_solution_m);</div>
<div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;      </div>
<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;      <span class="keyword">typename</span> move_manager_t::iterator best_movit = base_t::moves_m.end(); </div>
<div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;      gol_type best_move_cost = std::numeric_limits&lt;gol_type&gt;::max();</div>
<div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;      </div>
<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;      <span class="keywordflow">for</span>(<span class="keyword">typename</span> move_manager_t::iterator movit = base_t::moves_m.begin(); </div>
<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;      movit != base_t::moves_m.end(); ++movit)</div>
<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;    {</div>
<div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;      <span class="comment">// evaluate proposed move</span></div>
<div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;      gol_type cost = (*movit)-&gt;evaluate(base_t::working_solution_m);</div>
<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;      </div>
<div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;      <span class="comment">// save tabu status</span></div>
<div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;      <span class="keywordtype">bool</span> is_tabu = tabu_list_m.<a class="code" href="classmets_1_1tabu__list__chain.html#a5c7158bc02328a2ce191259f50b82281">is_tabu</a>(base_t::working_solution_m, </div>
<div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;                         **movit);</div>
<div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160; </div>
<div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;      <span class="comment">// for each non-tabu move record the best one</span></div>
<div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;      <span class="keywordflow">if</span>(cost &lt; best_move_cost)</div>
<div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;        {</div>
<div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;          </div>
<div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;          <span class="keywordtype">bool</span> aspiration_criteria_met = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;          </div>
<div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;          <span class="comment">// not interesting if this is not a tabu move (and if we</span></div>
<div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;          <span class="comment">// are not improving over other moves)</span></div>
<div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;          <span class="keywordflow">if</span>(is_tabu) </div>
<div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;        {</div>
<div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;          aspiration_criteria_met = </div>
<div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;            aspiration_criteria_m(base_t::working_solution_m, </div>
<div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;                      **movit,</div>
<div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;                      cost);</div>
<div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;        }</div>
<div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;          </div>
<div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;          <span class="keywordflow">if</span>(!is_tabu || aspiration_criteria_met)</div>
<div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;        {</div>
<div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;          best_move_cost = cost;</div>
<div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;          best_movit = base_t::current_move_m = movit;</div>
<div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;          <span class="keywordflow">if</span>(aspiration_criteria_met)</div>
<div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;            {</div>
<div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;              base_t::step_m = ASPIRATION_CRITERIA_MET;</div>
<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;              this-&gt;<a class="code" href="classmets_1_1subject.html#a604a3c6cb19a470779170e29528f3e83">notify</a>();</div>
<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;            }</div>
<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;        }</div>
<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;        }</div>
<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;    } <span class="comment">// end for each move</span></div>
<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;      </div>
<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;      <span class="keywordflow">if</span>(best_movit == base_t::moves_m.end())</div>
<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;    <span class="keywordflow">throw</span> no_moves_error();</div>
<div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160; </div>
<div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;      <span class="comment">// make move tabu</span></div>
<div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;      tabu_list_m.<a class="code" href="classmets_1_1tabu__list__chain.html#a489d13452cd934ee18ec5a423585ab8f">tabu</a>(base_t::working_solution_m, **best_movit);</div>
<div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160; </div>
<div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;      <span class="comment">// do the best non tabu move (unless overridden by aspiration</span></div>
<div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;      <span class="comment">// criteria, of course)</span></div>
<div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;      (*best_movit)-&gt;apply(base_t::working_solution_m);</div>
<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160; </div>
<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;      <span class="comment">// call listeners</span></div>
<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;      base_t::step_m = base_t::MOVE_MADE;</div>
<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;      this-&gt;<a class="code" href="classmets_1_1subject.html#a604a3c6cb19a470779170e29528f3e83">notify</a>();</div>
<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;      </div>
<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;      aspiration_criteria_m.<a class="code" href="classmets_1_1aspiration__criteria__chain.html#a3d5d9fd8cafb66ffcaafd02c935ed6a2">accept</a>(base_t::working_solution_m, </div>
<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;                   **best_movit, </div>
<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;                   best_move_cost);</div>
<div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;      </div>
<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;      <span class="keywordflow">if</span>(base_t::solution_recorder_m.accept(base_t::working_solution_m))</div>
<div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;    {</div>
<div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;      base_t::step_m = base_t::IMPROVEMENT_MADE;</div>
<div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;      this-&gt;<a class="code" href="classmets_1_1subject.html#a604a3c6cb19a470779170e29528f3e83">notify</a>();</div>
<div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;    }</div>
<div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160; </div>
<div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;      <span class="comment">// call listeners</span></div>
<div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;      base_t::step_m = base_t::ITERATION_END;</div>
<div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;      this-&gt;<a class="code" href="classmets_1_1subject.html#a604a3c6cb19a470779170e29528f3e83">notify</a>();</div>
<div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;      </div>
<div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;    } <span class="comment">// end while(!termination)</span></div>
<div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;}</div>
<div class="ttc" id="aclassmets_1_1aspiration__criteria__chain_html_a3d5d9fd8cafb66ffcaafd02c935ed6a2"><div class="ttname"><a href="classmets_1_1aspiration__criteria__chain.html#a3d5d9fd8cafb66ffcaafd02c935ed6a2">mets::aspiration_criteria_chain::accept</a></div><div class="ttdeci">virtual void accept(feasible_solution &amp;fs, move &amp;mov, gol_type evaluation)</div><div class="ttdoc">This is a callback function from the algorithm that tells us that a move was accepted.</div><div class="ttdef"><b>Definition:</b> tabu-search.hh:581</div></div>
<div class="ttc" id="aclassmets_1_1subject_html_a604a3c6cb19a470779170e29528f3e83"><div class="ttname"><a href="classmets_1_1subject.html#a604a3c6cb19a470779170e29528f3e83">mets::subject&lt; abstract_search&lt; move_manager_type &gt; &gt;::notify</a></div><div class="ttdeci">virtual void notify()</div><div class="ttdoc">Notify all attached observers.</div><div class="ttdef"><b>Definition:</b> observer.hh:161</div></div>
<div class="ttc" id="aclassmets_1_1tabu__list__chain_html_a489d13452cd934ee18ec5a423585ab8f"><div class="ttname"><a href="classmets_1_1tabu__list__chain.html#a489d13452cd934ee18ec5a423585ab8f">mets::tabu_list_chain::tabu</a></div><div class="ttdeci">virtual void tabu(feasible_solution &amp;sol, move &amp;mov)=0</div><div class="ttdoc">Make a move tabu when starting from a certain solution.</div><div class="ttdef"><b>Definition:</b> tabu-search.hh:491</div></div>
<div class="ttc" id="aclassmets_1_1tabu__list__chain_html_a5c7158bc02328a2ce191259f50b82281"><div class="ttname"><a href="classmets_1_1tabu__list__chain.html#a5c7158bc02328a2ce191259f50b82281">mets::tabu_list_chain::is_tabu</a></div><div class="ttdeci">virtual bool is_tabu(feasible_solution &amp;sol, move &amp;mov) const =0</div><div class="ttdoc">True if the move is tabu for the given solution.</div><div class="ttdef"><b>Definition:</b> tabu-search.hh:498</div></div>
</div><!-- fragment -->
</div>
</div>
<hr/>该类的文档由以下文件生成:<ul>
<li>recognition/include/pcl/recognition/3rdparty/metslib/<a class="el" href="tabu-search_8hh_source.html">tabu-search.hh</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><b>mets</b></li><li class="navelem"><a class="el" href="classmets_1_1tabu__search.html">tabu_search</a></li>
    <li class="footer">制作者 <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
  </ul>
</div>
</body>
</html>
